package huffman;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author ennio
 */
public class Nodo {
    private int frecuencia;
    private Nodo padre;
    private Nodo hijoIzq;
    private Nodo hijoDer;
    private String caracter;//codigo a mostrar en pantalla... dependiendo de su 
    private String letra; //letra representativa
    public Nodo(String caracter, String letra){
        this.caracter = caracter;
    }
    public Nodo(){}
    public Nodo(Nodo padre, String caracter, String letra){
        this.padre = padre;
        this.caracter = caracter;
        
    }
    public Nodo(Nodo temp){
        this.frecuencia = temp.frecuencia;
        this.hijoDer = temp.hijoDer;
        this.hijoIzq = temp.hijoIzq;
        this.letra = temp.letra;
    }
    public Nodo(Nodo izq, Nodo der, String letra, int frecuencia){
        this.hijoDer = der;
        this.hijoIzq = izq;
        this.letra = letra;
        this.frecuencia = frecuencia;
    }
    public Nodo(String letra, int frecuencia){
        this.letra = letra;
        this.frecuencia = frecuencia;
    }
    public Nodo(Nodo derecho, Nodo izquierdo){
        this.setHijoDer(derecho);
        this.setHijoIzq(izquierdo);
        this.setFrecuencia(derecho.getFrecuencia()+izquierdo.getFrecuencia());
        this.setLetra(derecho.getLetra()+""+izquierdo.getLetra()+"");
    }
    public boolean Contiene(String letra){
        return this.getLetra().contains(letra);
    }
    public String getString(String caracter){
        
        if (this.getLetra().equals(caracter)){return "";
        }

        if (this.getHijoIzq().Contiene(caracter)){
            return  "0"+ this.getHijoIzq().getString(caracter); 
        }else {
            return  "1"+ this.getHijoDer().getString(caracter); 
        }


    }
    
    
    
    public void setPadre(Nodo derecho, Nodo izquierdo, Nodo padre){
        padre.setHijoDer(derecho);
        padre.setHijoIzq(izquierdo);
        padre.setFrecuencia(derecho.getFrecuencia()+izquierdo.getFrecuencia());
        padre.setLetra(derecho.getLetra()+""+izquierdo.getLetra()+"");
    }
    public int getFrecuencia(){
        return this.frecuencia;
    }
    public void setFrecuencia(int frecuencia){
            this.frecuencia = frecuencia;
    }
    public String getLetra(){
        return this.letra;
    }
    public void setLetra(String letra){
        this.letra = letra;
    }
    public void setHijoIzq(Nodo hijo){
        this.hijoIzq = hijo;
    }
    public void setHijoDer(Nodo hijo){
        this.hijoDer = hijo;
    }
    public Nodo getHijoDer(){
        return this.hijoDer;
    }
    public Nodo getHijoIzq(){
        return this.hijoIzq;
    }
    public Nodo getPadre(){
        return this.padre;
    }
    
    
}
